package com.beiben.statistics.service.impl;


import com.beiben.quality.domain.QaContractSum;
import com.beiben.quality.domain.QaQualityInfo;
import com.beiben.statistics.mapper.ErrorRateAnalysisMapper;
import com.beiben.statistics.service.IErrorRateAnalysisService;
import com.beiben.statistics.vo.ErrorRateAnalysisVo;
import com.beiben.statistics.vo.LineDataVo;
import com.beiben.statistics.vo.MonthDate;
import com.beiben.utils.DateUtil;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class ErrorRateAnalysisServiceImpl implements IErrorRateAnalysisService {

    @Autowired
    private ErrorRateAnalysisMapper errorRateAnalysisMapper;


/*************************************生产售后阶段问题分析结束************************************************/

    /**
     * 查询总资料差错率和平均值
     *
     * @param
     * @return
     */
    @Override
    public Map<String, Object> selectAllRate(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        setIsProduction(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
        List<ErrorRateAnalysisVo> rateList = errorRateAnalysisMapper.selectAllErrorRate(errorRateAnalysisVo);
        Double average = errorRateAnalysisMapper.selectAverage(errorRateAnalysisVo);
        map.put("dataList", rateList);
        map.put("average", average);

        return map;
    }

    /**
     * 按车型查询差错率和平均值
     *
     * @param
     * @return
     */
    @Override
    public Map<String, Object> selectRateByType(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        setIsProduction(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
        List<Map> list = new ArrayList<>();

        List<ErrorRateAnalysisVo> average = errorRateAnalysisMapper.selectAverageByType(errorRateAnalysisVo);

        Map<String, Object> mapAvg = new HashMap<>();
        Map<String, Object> mapMonth = new HashMap<>();

        List<MonthDate> rateList = errorRateAnalysisMapper.selectRateByType(errorRateAnalysisVo);

        mapAvg.put("average", average);
        mapMonth.put("dataList", rateList);
        list.add(mapAvg);
        list.add(mapMonth);
        map.put("data", list);
        return map;
    }


    /**
     * 按系统查询差错率和平均值
     *
     * @param
     * @return
     */
    @Override
    public Map<String, Object> selectRateBySystem(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        setIsProduction(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
        List<Map> list = new ArrayList<>();
        List<ErrorRateAnalysisVo> average = errorRateAnalysisMapper.selectAverageBySystem(errorRateAnalysisVo);
        List<ErrorRateAnalysisVo> rateList = errorRateAnalysisMapper.selectRateBySystem(errorRateAnalysisVo);

        Map<String, Object> data = new HashMap<>();
        data.put("average", average);
        data.put("xInfo", rateList);
        map.put("data", data);

        return map;
    }

    /**
     * 按组别查询差错率
     *
     * @param
     * @return
     */
    @Override
    public Map<String, Object> selectRateByGroups(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        setIsProduction(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
        List<Map> list = new ArrayList<>();
        // TODO: 2021/3/17  如果前端未传递车型参数，查询数据字典获取默认车型
        List<ErrorRateAnalysisVo> rateList1 = errorRateAnalysisMapper.selectRateByGroups(errorRateAnalysisVo);
        Map<String, List<ErrorRateAnalysisVo>> rateTypeGroup = rateList1.stream().collect(Collectors.groupingBy(ErrorRateAnalysisVo::getType));
        for (Map.Entry<String, List<ErrorRateAnalysisVo>> item : rateTypeGroup.entrySet()) {
            Map<String, Object> map1 = new HashMap<>();
            map1.put("type", item.getKey());
            map1.put("dataList", item.getValue());
            list.add(map1);
        }
        map.put("data", list);
        return map;
    }


    @Override
    public List<QaQualityInfo> selectgroupErrrorrateSumList(ErrorRateAnalysisVo errorRateAnalysisVo)
    {
        setTime(errorRateAnalysisVo);
        return errorRateAnalysisMapper.selectgroupErrrorrateSumList(errorRateAnalysisVo);
    }



/*************************************生产售后阶段问题分析结束************************************************/

/*********************************试制阶段问题分析开始*******************************************************/

    /**
     * 试制问题总差错率
     *
     * @param
     * @return
     */
    @Override
    public Map<String, Object> selectTrialAllRate(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
        List<Map> list = new ArrayList<>();

        List<ErrorRateAnalysisVo> rateList = errorRateAnalysisMapper.selectTrialAllRate(errorRateAnalysisVo);

        map.put("rateList", rateList);

        return map;
    }


    /**
     * 各组别试制问题总体情况
     *
     * @param
     * @return
     */
    @Override
    public Map<String, Object> selectAllTrialRateByGroups(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
//        柱状图
        List<ErrorRateAnalysisVo> rateListBar = errorRateAnalysisMapper.selectAllTrialRateByGroupsBar(errorRateAnalysisVo);
//        饼图
        List<ErrorRateAnalysisVo> rateListPie = errorRateAnalysisMapper.selectAllTrialRateByGroupsPie(errorRateAnalysisVo);

        map.put("rateListBar", rateListBar);
        map.put("rateListPie", rateListPie);

        return map;
    }

    /***
     *
     * 各组别试制问题情况-按车型分
     *
     */
    @Override
    public Map<String, Object> selectAllTrialRateByGroupsType(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
//        柱状图
        List<ErrorRateAnalysisVo> rateListBar = errorRateAnalysisMapper.selectAllTrialRateByGroupsTypeBar(errorRateAnalysisVo);
//        饼图
        List<ErrorRateAnalysisVo> rateListPie = errorRateAnalysisMapper.selectAllTrialRateByGroupsTypePie(errorRateAnalysisVo);

        map.put("rateListBar", rateListBar);
        map.put("rateListPie", rateListPie);

        return map;
    }

    /***
     * 各系统试制总问题数概况
     */
    @Override
    public Map<String, Object> selectAllTrialRateBySystem(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
//        柱状图
        List<ErrorRateAnalysisVo> rateListBar = errorRateAnalysisMapper.selectAllTrialRateBySystem(errorRateAnalysisVo);

        map.put("rateListBar", rateListBar);

        return map;
    }

    /***
     * 各系统试制问题总体情况-按系统分
     */

    @Override
    public Map<String, Object> selectAllTrialRateBySystemType(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
//        柱状图
        List<ErrorRateAnalysisVo> rateListPie = errorRateAnalysisMapper.selectAllTrialRateBySystemType(errorRateAnalysisVo);

        map.put("rateListPie", rateListPie);

        return map;
    }

    /***
     * 试制问题数-按问题种类分
     */

    @Override
    public Map<String, Object> selectAllTrialRateByQuestion(ErrorRateAnalysisVo errorRateAnalysisVo) throws ParseException {
        setTime(errorRateAnalysisVo);
        Map<String, Object> map = new HashMap<>();
//        柱状图
        List<ErrorRateAnalysisVo> rateListBar = errorRateAnalysisMapper.selectAllTrialRateByQuestion(errorRateAnalysisVo);

        map.put("rateListBar", rateListBar);

        return map;
    }

    @Override
    public List<QaQualityInfo> selectDetailListByGroup(ErrorRateAnalysisVo errorRateAnalysisVo) {
        setTime(errorRateAnalysisVo);
        return errorRateAnalysisMapper.selectDetailListByGroup(errorRateAnalysisVo);
    }



/*********************************试制阶段问题分析结束*******************************************************/

    /**
     * 默认时间 获取当前年
     * */
    public ErrorRateAnalysisVo setTime(ErrorRateAnalysisVo errorRateAnalysisVo){
        if(StringUtils.isEmpty(errorRateAnalysisVo.getBeginTime())||StringUtils.isEmpty(errorRateAnalysisVo.getEndTime())){
            String year = DateUtil.dateTimeNow(DateUtil.YYYY);
            errorRateAnalysisVo.setBeginTime(year+"-01");
            errorRateAnalysisVo.setEndTime(year+"-12");
        }

        return errorRateAnalysisVo;
    }
    //Y: 试制、试验;N：生产;Z:售后
    public ErrorRateAnalysisVo setIsProduction(ErrorRateAnalysisVo errorRateAnalysisVo){

//        if(StringUtils.isEmpty(errorRateAnalysisVo.getIsProduction())){
//            errorRateAnalysisVo.setIsProduction("N");
//        }else
        if(StringUtils.isEmpty(errorRateAnalysisVo.getProblemStage())){
            errorRateAnalysisVo.setIsProduction("N");
        }
        else if(StringUtils.equals(errorRateAnalysisVo.getProblemStage(),"0")){
            errorRateAnalysisVo.setIsProduction("N");
        }else if(StringUtils.equals(errorRateAnalysisVo.getProblemStage(),"1")){
            errorRateAnalysisVo.setIsProduction("Z");
        }else if(StringUtils.isEmpty(errorRateAnalysisVo.getIsProduction())){
            errorRateAnalysisVo.setIsProduction("Y");
        }
            return errorRateAnalysisVo;
    }


}
